from django.db import models

# Create your models here.
import os

def media_file_name(instance, filename):
    """
    生成媒体文件在服务器上的存储路径。

    参数:
    - instance: 文件实例，应包含文件的md5sum属性。
    - filename: 原始文件名。

    返回值:
    - 返回一个字符串，表示文件在服务器上的存储路径。
    """
    h = instance.md5sum  # 获取文件的md5sum值
    basename, ext = os.path.splitext(filename)  # 分离文件名和扩展名
    # 根据md5sum值的前两位和完整的md5sum值，以及文件扩展名（转为小写）生成文件的存储路径
    return os.path.join('files', h[0:1], h[1:2], h + ext.lower())


class File(models.Model):
    name = models.CharField(max_length=255, null=True, blank=True, verbose_name="实际名称", help_text="实际名称")
    save_name = models.CharField(max_length=255, null=True, blank=True, verbose_name="存储名称", help_text="存储名称")
    url = models.FileField(upload_to=media_file_name)
    size = models.BigIntegerField(null=True, blank=True, verbose_name="大小", help_text="大小")
    md5sum = models.CharField(max_length=36, blank=True, verbose_name="文件md5", help_text="文件md5")

    class Meta:
        db_table = 'system_file'
        verbose_name = '文件管理'
        verbose_name_plural = verbose_name
        # 根据id排序
        ordering = ['id']